package com.zzl.mine.httpclient;

import java.util.concurrent.TimeUnit;

import org.apache.http.conn.HttpClientConnectionManager;

/**
 * @description 使用一个单独的线程完成连接池中的无效连接的清理
 * @author rambo
 * @date 2018年10月9日 上午10:58:28
 */
public class IdleConnectionEvictor extends Thread {
	
	private final HttpClientConnectionManager connMgr;
	
	private volatile boolean shutdown;
	
	public IdleConnectionEvictor(HttpClientConnectionManager connMgr) {
		super();
		this.connMgr = connMgr;
	}
	
	/**
	 * @description 线程体
	 */
	@Override
	public void run() {
		try {
			while (!shutdown) {// shutdown默认初始化为false
				synchronized (this) {// 线程同步
					wait(5000);// 线程等待5秒
					connMgr.closeExpiredConnections();// 关闭失效的连接
                    connMgr.closeIdleConnections(30, TimeUnit.SECONDS);// 关闭空闲超过30秒的连接  
				}
			}
		} catch (InterruptedException e) {
			// 结束
		}
	}
	
	/**
	 * @description 销毁方法，类似于close
	 */
	public void shutdown() {
		shutdown = true;
		synchronized (this) {
			notifyAll();// 唤醒在此对象监视器上等待的所有线程
		}
	}
	
}
